package com.example.newhabitclock.HabitRoomPackage

import android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
import androidx.room.TypeConverters
import com.example.newhabitclock.RecordRoomPackage.CheckInRecord
import com.example.newhabitclock.RecordRoomPackage.CheckInRecordDao

//抽象类，提供方法供外界获取database单例
@Database(entities = [Habit::class, CheckInRecord::class], version = 2)
//使数据库Room支持list<String>等复杂的数据类型
//Room会自动使用转换器
@TypeConverters(Converters::class)
abstract class HabitDatabase : RoomDatabase() {
    abstract fun getHabitDao(): HabitDao
    abstract fun getCheckInRecordDao(): CheckInRecordDao

    companion object {
        private var INSTANCE: HabitDatabase? = null

        fun getHabitDatabase(context: Context): HabitDatabase {
            if (INSTANCE == null) {
                INSTANCE = Room.databaseBuilder(
                    context.applicationContext,
                    HabitDatabase::class.java,
                    "habit_database"
                ).fallbackToDestructiveMigration()  //在更新 HabitDatabase 的版本号（从 1 到 2）并新增 CheckInRecord 表后
                    .build()                        // 未提供 数据库迁移策略（Migration），导致 Room 无法自动处理版本升级
                                                    //测试环境允许破坏性迁移，允许 Room 删除旧表并重建新表。此操作会清空所有数据
            }
            return INSTANCE!!
        }
    }
}